Our modern connected world is facilitated by message processors communicating messages back and forth. A message processor may be quite complex such as a fully capable computing system or even a collection of computing systems. On the other hand, a message processor may be quite simple, and might even be just a simple state machine (e.g., an earpiece). Message processors may also have capabilities between these two extremes. Furthermore, the capabilities of channels between message processors are just as varied. The channel may be a fiberoptic bundle, having large bandwidths on the order of many terabits (10^12 bits) of information per second, or may be much slower such as, for example, an infrared or Bluetooth connection.
In order to reduce the amount of information transmitted between message processors over a particular channel, the information is often compressed. In a typically compression technology, a dictionary of symbols is constructed, where each symbol replaces a particular sequence of bits. Huffman encoding, Arithmetic coding, and LZW coding are examples of such a dictionary-based compression technology. However, such compression technologies perform compression based on knowledge at the bit-level, and do not use semantic knowledge of the data (i.e., the meaning of the data) to perform compression.